Django এর টেমপ্লেট সিস্টেম একটি শক্তিশালী এবং নমনীয় টুল যা আপনাকে HTML ফাইলের মধ্যে ডাইনামিক ডেটা ইনজেক্ট করতে সাহায্য করে। এটি Django অ্যাপ্লিকেশনে ইউজার ইন্টারফেস (UI) তৈরি করার জন্য ব্যবহৃত হয়। Django এর টেমপ্লেট সিস্টেম HTML কোডের সাথে লজিক্যাল ডেটা একত্রিত করতে সাহায্য করে, যা ইউজারকে সঠিক তথ্য প্রদর্শন করে।
এখানে, আমরা Django এর টেমপ্লেট সিস্টেমের মূল বিষয়গুলো আলোচনা করব, যেমন টেমপ্লেট ফাইল তৈরি, টেমপ্লেট ভ্যারিয়েবল ব্যবহার, লুপ এবং কন্ডিশনাল স্টেটমেন্ট, ইনক্লুড এবং এক্সটেন্ড, এবং আরও অনেক কিছু।
Django টেমপ্লেট ফাইল তৈরি করা
Django প্রজেক্টে টেমপ্লেট ফাইলগুলি সাধারণত templates/ ডিরেক্টরিতে রাখা হয়। এই ফোল্ডারে HTML ফাইলগুলিকে Django টেমপ্লেট হিসেবে তৈরি করা হয়, যেখানে ডাইনামিক ডেটা ইনজেক্ট করা যায়।
১. টেমপ্লেট ডিরেক্টরি কনফিগারেশন
প্রথমে, আপনার Django প্রজেক্টের settings.py ফাইলে TEMPLATES সেটিংস কনফিগার করতে হবে। সাধারণত Django ডিফল্টভাবে templates/ ফোল্ডার খুঁজে পায়, তবে যদি আপনি কাস্টম ডিরেক্টরি ব্যবহার করতে চান, তাহলে সেটি কনফিগার করতে হবে।
# settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'], # আপনার কাস্টম টেমপ্লেট ডিরেক্টরি এখানে নির্ধারণ করুন
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
২. টেমপ্লেট ফাইল তৈরি করা
এখন আপনি templates/ ডিরেক্টরিতে HTML টেমপ্লেট ফাইল তৈরি করতে পারবেন। উদাহরণস্বরূপ, home.html নামে একটি ফাইল তৈরি করা যাক।
templates/home.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Django</title>
</head>
<body>
<h1>Welcome, {{ name }}!</h1>
<p>Today's Date: {{ current_date }}</p>
</body>
</html>
এখানে, {{ name }} এবং {{ current_date }} হল টেমপ্লেট ভ্যারিয়েবল, যেগুলি Django ভিউ থেকে ডাইনামিকভাবে পাস করা হবে।
Django Views এ টেমপ্লেট রেন্ডার করা
Django ভিউ ফাংশন বা ক্লাসের মাধ্যমে টেমপ্লেট রেন্ডার করা হয়। আপনি render() ফাংশন ব্যবহার করে HTML টেমপ্লেট এবং প্রয়োজনীয় কনটেক্সট ডেটা রেন্ডার করতে পারেন।
১. ভিউ ফাংশন লিখা
views.py
from django.shortcuts import render
from datetime import datetime
def home(request):
# কনটেক্সট ডেটা
context = {
'name': 'Alice',
'current_date': datetime.now()
}
# টেমপ্লেট রেন্ডার করা
return render(request, 'home.html', context)
এখানে, home ভিউ ফাংশনটি home.html টেমপ্লেট রেন্ডার করবে এবং কনটেক্সট ডেটা হিসেবে name এবং current_date পাঠাবে। টেমপ্লেটে এই ভ্যারিয়েবল দুটি প্রদর্শিত হবে।
Django টেমপ্লেট সিস্টেমের মূল বৈশিষ্ট্য
১. টেমপ্লেট ভ্যারিয়েবল
টেমপ্লেট ফাইলের মধ্যে আপনি {{ }} চিহ্ন ব্যবহার করে ভ্যারিয়েবল পাস করতে পারেন। এগুলি ভিউ থেকে ডাইনামিক ডেটা রেন্ডার করতে ব্যবহৃত হয়।
উদাহরণ:
<p>Welcome, {{ username }}!</p>
এখানে, username ভ্যারিয়েবলটি ভিউ থেকে কনটেক্সটে পাস করতে হবে।
২. টেমপ্লেট লুপস
Django টেমপ্লেট সিস্টেমে আপনি {% for %} লুপ ব্যবহার করে লিস্ট বা ডিকশনারি ইত্যাদি ডেটা স্ট্রাকচার ইটারেট করতে পারেন।
উদাহরণ:
<ul>
{% for item in item_list %}
<li>{{ item }}</li>
{% endfor %}
</ul>
এখানে, item_list একটি লিস্ট যা ভিউ থেকে কনটেক্সটে পাস করা হবে।
৩. টেমপ্লেট কন্ডিশনাল স্টেটমেন্ট
Django টেমপ্লেটে {% if %}, {% elif %}, এবং {% else %} কন্ডিশনাল লজিক ব্যবহার করা যায়।
উদাহরণ:
{% if user.is_authenticated %}
<p>Welcome back, {{ user.username }}!</p>
{% else %}
<p>Please log in to continue.</p>
{% endif %}
এখানে, যদি ইউজার লগিন করা থাকে, তবে তার নাম প্রদর্শিত হবে; না হলে লগইন করার জন্য একটি বার্তা দেখানো হবে।
৪. টেমপ্লেট ইনক্লুড এবং এক্সটেন্ড
Django এর টেমপ্লেট সিস্টেমে আপনি একটি টেমপ্লেটের অংশ অন্য টেমপ্লেটের মধ্যে ইনক্লুড করতে বা এক্সটেন্ড করতে পারেন। এর মাধ্যমে আপনি কোড পুনঃব্যবহারযোগ্য করে তুলতে পারেন।
টেমপ্লেট ইনক্লুড:
<!-- base.html -->
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}My Site{% endblock %}</title>
</head>
<body>
<div>
{% block content %}
{% endblock %}
</div>
</body>
</html>
<!-- home.html -->
{% extends 'base.html' %}
{% block title %}Home Page{% endblock %}
{% block content %}
<h1>Welcome to the Home Page</h1>
<p>This is a simple Django app.</p>
{% endblock %}
এখানে, home.html টেমপ্লেটটি base.html টেমপ্লেটটি এক্সটেন্ড করছে এবং কনটেন্ট ব্লকটিতে নিজের ডেটা ইনপুট করছে।
Django টেমপ্লেট সিস্টেমের সুবিধাসমূহ
- টেমপ্লেট ল্যাঙ্গুয়েজ: Django এর টেমপ্লেট সিস্টেম একটি সহজ, পাঠযোগ্য এবং নিরাপদ ল্যাঙ্গুয়েজ যা ডেভেলপার এবং ডিজাইনারদের জন্য সহায়ক।
- ডাইনামিক কন্টেন্ট: আপনি সহজেই HTML পেজে ডাইনামিক কন্টেন্ট ইনজেক্ট করতে পারেন।
- কোড পুনঃব্যবহারযোগ্যতা: টেমপ্লেট ইনক্লুড এবং এক্সটেন্ড ফিচার কোড পুনঃব্যবহার সহজ করে তোলে।
- সিকিউরিটি: Django টেমপ্লেট সিস্টেম HTML ইনজেকশন, ক্রস সাইট স্ক্রিপ্টিং (XSS) আক্রমণ থেকে সুরক্ষা দেয়।
Django এর টেমপ্লেট সিস্টেম ব্যবহার করে আপনি আপনার ওয়েব অ্যাপ্লিকেশনটির ইউজার ইন্টারফেস খুবই সহজ এবং কার্যকরভাবে ডিজাইন করতে পারবেন।
Django তে Template হল HTML ফাইল, যেখানে আপনি ডাইনামিক কন্টেন্ট যুক্ত করতে পারেন। Template ব্যবহারের মাধ্যমে আপনি ওয়েব পেজে ডেটা রেন্ডারিং করতে পারেন। Django Template Language (DTL) ব্যবহার করে আপনি Python কোডের মতো লজিক যোগ করতে পারেন, যেমন কন্ডিশনাল লজিক, লুপ, ফিল্টার ইত্যাদি। Template Django অ্যাপ্লিকেশনটির ভিউ (views) ফাংশন এবং ফ্রন্ট-এন্ড মধ্যে সংযোগ স্থাপন করে।
Template তৈরি করার প্রক্রিয়া
১. Template ডিরেক্টরি তৈরি করা
Django তে Template ফাইলগুলি সাধারণত একটি templates/ ডিরেক্টরির মধ্যে রাখা হয়। তবে, আপনি নিজেও অন্য কোনো ডিরেক্টরি তৈরি করতে পারেন, যেখানে আপনার সকল Template ফাইল থাকবে।
আপনার Django অ্যাপ্লিকেশন ফোল্ডারের মধ্যে
templatesনামের একটি নতুন ফোল্ডার তৈরি করুন:myapp/ templates/ myapp/ home.html about.htmlএখানে
myapp/হলো আপনার Django অ্যাপ্লিকেশনের নাম এবং এর মধ্যে রাখা HTML ফাইলগুলি আপনার টেমপ্লেট হবে।
২. settings.py এ TEMPLATE_DIRS কনফিগার করা
Django সেটিংস ফাইলে TEMPLATES সেটিংস ট্যাগের মধ্যে DIRS অ্যাট্রিবিউটে আপনি Template ফোল্ডারের লোকেশন উল্লেখ করতে পারেন, যেন Django আপনার Templates সঠিকভাবে খুঁজে পায়।
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
BASE_DIR / 'templates', # Project level template directory
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
এখানে DIRS অংশে BASE_DIR / 'templates' দেয়া হয়েছে, যা আপনার টেমপ্লেট ফোল্ডারের লোকেশন।
৩. Template ফাইল তৈরি করা
Django টেমপ্লেটে আপনি সাধারণ HTML কোডের সাথে Django Template Language (DTL) ব্যবহার করে ডাইনামিক কন্টেন্ট যোগ করতে পারেন।
<!-- home.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Home Page</title>
</head>
<body>
<h1>Welcome to {{ site_name }}</h1>
<p>This is the home page of {{ user_name }}'s website.</p>
</body>
</html>
এখানে:
{{ site_name }}এবং{{ user_name }}হল Django template variables, যেগুলি ভিউ (views) ফাংশন থেকে পাঠানো হবে।
৪. View ফাংশনে Template রেন্ডার করা
ভিউ ফাংশনে আপনার টেমপ্লেট রেন্ডার করার জন্য render() ফাংশন ব্যবহার করতে হবে। এর মাধ্যমে আপনি টেমপ্লেটে ডেটা পাঠাতে পারেন।
from django.shortcuts import render
def home_view(request):
context = {
'site_name': 'My Awesome Website',
'user_name': 'John Doe'
}
return render(request, 'myapp/home.html', context)
এখানে:
request: HTTP অনুরোধ অবজেক্ট।'myapp/home.html': টেমপ্লেট ফাইলের পাথ।context: ডেটা বা ভেরিয়েবল যা টেমপ্লেটের মধ্যে পাঠানো হবে।
৫. URL এ Template যুক্ত করা
ভিউ ফাংশনটি আপনার urls.py ফাইলে রাউট করুন যাতে এটি সঠিক URL এর মাধ্যমে অ্যাক্সেস করা যায়।
from django.urls import path
from . import views
urlpatterns = [
path('', views.home_view, name='home'), # Home page URL
]
৬. Template ফিল্টার এবং লজিক ব্যবহার করা
Django টেমপ্লেটে আপনি ডাইনামিক কন্টেন্ট প্রদর্শন করতে বিভিন্ন ফিল্টার, লজিক, লুপ এবং কন্ডিশন ব্যবহার করতে পারেন।
ফিল্টার: ডেটা প্রক্রিয়া করার জন্য টেমপ্লেট ফিল্টার ব্যবহার করা হয়।
{{ user_name|lower }} <!-- Converts 'John Doe' to 'john doe' -->
লুপ: তালিকা বা অ্যারে আইটেমগুলোকে লুপের মাধ্যমে প্রদর্শন করা যায়।
<ul>
{% for item in item_list %}
<li>{{ item }}</li>
{% endfor %}
</ul>
কন্ডিশন: কন্ডিশনাল লজিকের মাধ্যমে ডেটা শো করা যায়।
{% if user_name %}
<p>Hello, {{ user_name }}!</p>
{% else %}
<p>Hello, Guest!</p>
{% endif %}
৭. Static ফাইল ব্যবহার করা
স্ট্যাটিক ফাইল (যেমন CSS, JavaScript) টেমপ্লেটের মধ্যে ব্যবহার করতে, আপনাকে {% load static %} ট্যাগ ব্যবহার করতে হবে।
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ site_name }}</title>
<link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">
</head>
<body>
<h1>Welcome to {{ site_name }}</h1>
</body>
</html>
এখানে, {% static 'css/style.css' %} ব্যবহার করে CSS ফাইলটি লোড করা হয়েছে, যা Django এর স্ট্যাটিক ফোল্ডারে থাকতে হবে।
সারাংশ
Django তে Template তৈরি এবং ব্যবহারের মাধ্যমে আপনি HTML ফাইলের মধ্যে ডাইনামিক কন্টেন্ট যুক্ত করতে পারেন। Django Template Language (DTL) ব্যবহার করে আপনি ভেরিয়েবল, লজিক, লুপ এবং ফিল্টার ব্যবহার করতে পারবেন। ভিউ ফাংশন থেকে ডেটা টেমপ্লেটে পাঠানো হয় এবং টেমপ্লেটে তা রেন্ডার হয়। এছাড়া, স্ট্যাটিক ফাইল ব্যবহারের জন্য static ট্যাগ ব্যবহার করা হয়।
Template Inheritance Django তে একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে একটি মূল টেমপ্লেট তৈরি করতে এবং তার পরে অন্যান্য টেমপ্লেটগুলি তৈরি করতে সাহায্য করে, যেগুলি মূল টেমপ্লেটের কাঠামো (structure) পুনরায় ব্যবহার করবে। এটি কোড পুনঃব্যবহারযোগ্যতা এবং রক্ষণাবেক্ষণ সহজ করে তোলে। মূলত, টেমপ্লেট ইনহেরিটেন্স ব্যবহার করে একটি "বেস" টেমপ্লেট তৈরি করা হয়, এবং অন্যান্য টেমপ্লেটগুলিতে সেই বেস টেমপ্লেট থেকে কাঠামো পাওয়া যায়।
Template Inheritance এর মূল ধারণা
Django তে টেমপ্লেট ইনহেরিটেন্স সাধারণত দুটি উপাদান ব্যবহার করে:
{% extends "base.html" %}: এটি নির্দেশ করে যে এই টেমপ্লেটটি "base.html" টেমপ্লেটটি ইনহেরিট করবে।{% block block_name %}এবং{% endblock %}: ব্লক ডিফাইন করে যা সাব-টেমপ্লেটের মধ্যে কাস্টম কন্টেন্ট ইনজেক্ট করতে ব্যবহৃত হয়।
Template Inheritance কনফিগারেশন প্রক্রিয়া
১. বেস টেমপ্লেট তৈরি করা
প্রথমে একটি বেস টেমপ্লেট তৈরি করুন, যা অ্যাপ্লিকেশনটির মূল কাঠামো ধারণ করবে। এই টেমপ্লেটটি সাধারণত base.html নামে তৈরি হয়।
base.html উদাহরণ:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}My Website{% endblock %}</title>
</head>
<body>
<header>
<h1>Welcome to My Website</h1>
<nav>
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about/">About</a></li>
<li><a href="/contact/">Contact</a></li>
</ul>
</nav>
</header>
<main>
{% block content %}
<!-- Content will be inserted here -->
{% endblock %}
</main>
<footer>
<p>© 2024 My Website</p>
</footer>
</body>
</html>
এখানে:
{% block title %}এবং{% block content %}ব্লকগুলি সংজ্ঞায়িত করা হয়েছে। এই ব্লকগুলির মধ্যে ডিফল্ট কন্টেন্ট থাকবে, কিন্তু যেকোনো সাব-টেমপ্লেট এগুলির ভ্যালু ওভাররাইড (override) করতে পারে।
২. সাব-টেমপ্লেট তৈরি করা
এখন আপনি যেকোনো টেমপ্লেট তৈরি করতে পারেন যা base.html থেকে ইনহেরিট করবে এবং তার কাঠামো ব্যবহার করবে। উদাহরণস্বরূপ, একটি home.html সাব-টেমপ্লেট তৈরি করা যাক।
home.html উদাহরণ:
{% extends "base.html" %}
{% block title %}Home Page{% endblock %}
{% block content %}
<h2>Welcome to the Home Page</h2>
<p>This is the content of the home page.</p>
{% endblock %}
এখানে:
{% extends "base.html" %}: এটি নির্দেশ করে যেhome.htmlটেমপ্লেটটিbase.htmlটেমপ্লেটটি ইনহেরিট করছে।{% block title %}: এই ব্লকটিbase.htmlএরtitleব্লককে ওভাররাইড করছে।{% block content %}: এই ব্লকটিbase.htmlএরcontentব্লককে ওভাররাইড করছে এবং এতে কাস্টম কন্টেন্ট ইনজেক্ট করছে।
৩. আরও সাব-টেমপ্লেট তৈরি করা
আপনি আরও অনেক সাব-টেমপ্লেট তৈরি করতে পারেন যা বেস টেমপ্লেটের কাঠামো অনুসরণ করবে। যেমন, একটি about.html টেমপ্লেট:
about.html উদাহরণ:
{% extends "base.html" %}
{% block title %}About Us{% endblock %}
{% block content %}
<h2>About Our Website</h2>
<p>This is the about page where you can learn more about us.</p>
{% endblock %}
এখানে, **about.html**ও একইভাবে base.html এর কাঠামো ব্যবহার করছে, তবে শুধুমাত্র title এবং content ব্লকগুলোকে কাস্টমাইজ করা হয়েছে।
Template Inheritance এর সুবিধা
- কোড পুনঃব্যবহারযোগ্যতা: একবার বেস টেমপ্লেট তৈরি করার পর, আপনি আপনার সমস্ত সাব-টেমপ্লেটে একই কাঠামো পুনরায় ব্যবহার করতে পারেন।
- সহজ রক্ষণাবেক্ষণ: আপনার ওয়েবসাইটের সমস্ত পেজের লেআউট বা কাঠামো পরিবর্তন করতে হলে, কেবলমাত্র বেস টেমপ্লেটে পরিবর্তন আনলেই হবে। এর ফলে, সব পেজে পরিবর্তনগুলি স্বয়ংক্রিয়ভাবে প্রতিফলিত হবে।
- কাস্টম কন্টেন্ট ইনজেকশন: টেমপ্লেট ইনহেরিটেন্স ব্লক ব্যবহারের মাধ্যমে আপনি প্রতিটি পেজের কাস্টম কন্টেন্ট ইনজেক্ট করতে পারবেন, যা একাধিক পেজে নির্দিষ্ট কন্টেন্ট প্রদর্শনের জন্য উপকারী।
Conclusion
Django তে Template Inheritance এর মাধ্যমে আপনি সহজেই আপনার ওয়েব অ্যাপ্লিকেশনগুলির কাঠামো এবং লেআউট বজায় রাখতে পারেন, এবং একাধিক পেজে কোড পুনরায় ব্যবহার করে উন্নত রক্ষণাবেক্ষণ এবং কার্যকারিতা নিশ্চিত করতে পারেন।
Django টেমপ্লেট সিস্টেমে Template Filters এমন ফাংশন যা টেমপ্লেটের মধ্যে ডাটা প্রদর্শন করার সময় আউটপুট পরিবর্তন বা ফরম্যাট করতে ব্যবহৃত হয়। টেমপ্লেট ফিল্টারগুলি সাধারণত একটি পাইপ | চিহ্নের মাধ্যমে টেমপ্লেটের মধ্যে প্রয়োগ করা হয়। Django অনেক বিল্ট-ইন ফিল্টার প্রদান করে, কিন্তু প্রয়োজনে আপনি Custom Template Filters তৈরি করতে পারেন।
Template Filters
Django-তে Template Filters হল সরল ফাংশন যেগুলি আপনার ডাটা বা ভেরিয়েবলকে নির্দিষ্ট আকারে প্রদর্শন করতে ব্যবহৃত হয়। Django বিভিন্ন প্রকারের বিল্ট-ইন টেমপ্লেট ফিল্টার সরবরাহ করে যা আপনি টেমপ্লেটে ব্যবহার করতে পারেন।
১. কিছু সাধারণ Built-in Template Filters
datefilter: এটি একটি তারিখ বা সময় ফরম্যাট করার জন্য ব্যবহৃত হয়।উদাহরণ:
{{ post.date_published|date:"F j, Y" }}এখানে
dateফিল্টার তারিখকেMonth Day, Yearফরম্যাটে প্রদর্শন করবে। যেমন:October 5, 2024lowerfilter: এটি একটি স্ট্রিংকে ছোট অক্ষরে পরিণত করে।উদাহরণ:
{{ user.name|lower }}যদি
user.name"John" হয়, তাহলে এটি "john" প্রদর্শন করবে।defaultfilter: এটি কোনো ভেরিয়েবল যদিNoneবাFalseহয়, তবে ডিফল্ট মান প্রদান করে।উদাহরণ:
{{ user.profile_picture|default:"/static/images/default.jpg" }}যদি
user.profile_picturenull বাNoneহয়, তবে/static/images/default.jpgচিত্র প্রদর্শিত হবে।lengthfilter: এটি একটি লিস্ট বা স্ট্রিং-এর দৈর্ঘ্য প্রদান করে।উদাহরণ:
{{ my_list|length }}এটি
my_list-এর উপাদানের সংখ্যা প্রদর্শন করবে।joinfilter: এটি একটি তালিকার উপাদানগুলো একটি নির্দিষ্ট স্ট্রিং দিয়ে যোগ করে।উদাহরণ:
{{ my_list|join:", " }}এটি তালিকার উপাদানগুলো কমা দিয়ে যোগ করবে, যেমন:
item1, item2, item3।
২. ফিল্টার ব্যবহারের উদাহরণ
ধরা যাক, আপনি একটি ব্লগ পোস্টের তৈরি তারিখ এবং পোস্টের বিষয়বস্তু প্রদর্শন করতে চান। তাহলে আপনি নিম্নলিখিতভাবে টেমপ্লেট লিখতে পারেন:
<p>Post published on: {{ post.date_published|date:"F j, Y" }}</p>
<p>{{ post.content|truncatewords:30 }}</p>
এখানে:
dateফিল্টার তারিখকে উপযুক্ত ফরম্যাটে প্রদর্শন করবে।truncatewordsফিল্টার পোস্টের কনটেন্টকে ৩০ শব্দে সংকুচিত করবে।
Custom Template Filters
Django-তে আপনি Custom Template Filters তৈরি করতে পারেন যেগুলি আপনার প্রয়োজন অনুযায়ী ডেটা পরিবর্তন করবে। এটি করার জন্য আপনাকে একটি custom filters module তৈরি করতে হবে এবং সেখানে একটি ফিল্টার ফাংশন ডিফাইন করতে হবে।
১. Custom Filter তৈরি করা
ধরা যাক, আপনি একটি ফিল্টার তৈরি করতে চান যা একটি স্ট্রিং-এর প্রথম অক্ষরকে বড় করে দিবে।
- প্রথমে আপনার অ্যাপের templatetags ফোল্ডারে একটি Python ফাইল তৈরি করুন, যেমন
custom_filters.py। - সেখানে একটি ফিল্টার ফাংশন লিখুন:
# templatetags/custom_filters.py
from django import template
register = template.Library()
@register.filter(name='capitalize_first')
def capitalize_first(value):
if isinstance(value, str):
return value.capitalize()
return value
এখানে:
register.filterডেকোরেটরটি এই ফাংশনটিকে একটি টেমপ্লেট ফিল্টার হিসেবে নিবন্ধন করবে।capitalize_firstফিল্টারটি স্ট্রিংয়ের প্রথম অক্ষর বড় করবে।
২. Custom Filter ব্যবহার করা
এখন, টেমপ্লেট ফাইলে এই ফিল্টার ব্যবহার করতে হলে আপনাকে প্রথমে {% load %} ট্যাগ দিয়ে ফিল্টারটি লোড করতে হবে:
{% load custom_filters %}
<p>{{ user.name|capitalize_first }}</p>
এখানে, যদি user.name হয় "john", তাহলে এটি "John" প্রদর্শন করবে।
৩. Complex Custom Filter উদাহরণ
ধরা যাক, আপনি একটি ফিল্টার তৈরি করতে চান যা একটি লিস্টের সব স্ট্রিংয়ের প্রথম অক্ষর বড় করবে।
# templatetags/custom_filters.py
from django import template
register = template.Library()
@register.filter(name='capitalize_all')
def capitalize_all(value):
if isinstance(value, list):
return [item.capitalize() for item in value if isinstance(item, str)]
return value
এখানে:
- যদি
valueএকটি লিস্ট হয়, তবে এটি প্রতিটি স্ট্রিংয়ের প্রথম অক্ষর বড় করে দেবে।
৪. Custom Filter ব্যবহার করা
{% load custom_filters %}
<ul>
{% for item in my_list %}
<li>{{ item|capitalize_all }}</li>
{% endfor %}
</ul>
এটি লিস্টের সমস্ত স্ট্রিংয়ের প্রথম অক্ষর বড় করে প্রদর্শন করবে।
সারাংশ
- Template Filters Django-তে ডাটা প্রক্রিয়া করার একটি শক্তিশালী টুল। Django অনেক বিল্ট-ইন ফিল্টার প্রদান করে, যেমন
date,lower,lengthইত্যাদি। - Custom Filters তৈরি করা যায় যদি আপনার প্রোজেক্টের জন্য কাস্টম ফিল্টার প্রয়োজন হয়। আপনি আপনার নিজস্ব কাস্টম ফিল্টার তৈরি করতে
templatetagsমডিউল ব্যবহার করে। - Custom Filters তৈরি করার জন্য
register.filterডেকোরেটর ব্যবহার করা হয়, এবং আপনি এই ফিল্টারগুলি টেমপ্লেটে{% load %}ট্যাগ দিয়ে লোড করতে পারেন।
Django প্রজেক্টে Static Files হলো সেই ফাইলগুলো, যেগুলো প্রজেক্টের ফ্রন্ট-এন্ড উপস্থাপনার জন্য ব্যবহৃত হয়, যেমন CSS, JavaScript, এবং Images। এগুলো সাধারণত আপনার অ্যাপ্লিকেশনের স্ট্যাটিক ফোল্ডারে রাখা হয় এবং ডেভেলপমেন্ট ও প্রোডাকশন পরিবেশে সেগুলো সার্ভ করা হয়।
Static Files কনফিগারেশন
Django-তে static files ব্যবহারের জন্য কিছু কনফিগারেশন প্রয়োজন হয়, যা settings.py ফাইলে নির্ধারণ করা হয়।
১. STATIC_URL কনফিগারেশন
STATIC_URL সেটিংটি Django অ্যাপ্লিকেশনের স্ট্যাটিক ফাইলগুলো ব্রাউজারের মাধ্যমে অ্যাক্সেস করতে ব্যবহৃত URL রুট নির্ধারণ করে। ডিফল্টভাবে, এটি '/static/' থাকে:
STATIC_URL = '/static/'
এটি নির্দেশ করে যে, স্ট্যাটিক ফাইলগুলো /static/ URL রুটের মাধ্যমে পাওয়া যাবে।
২. STATICFILES_DIRS কনফিগারেশন
আপনি যদি আরও কোনো অতিরিক্ত স্ট্যাটিক ফোল্ডার ব্যবহার করতে চান, যেমন আপনার অ্যাপের বাইরে কোনো ফোল্ডারে স্ট্যাটিক ফাইল সংরক্ষণ করতে, তাহলে STATICFILES_DIRS সেটিংটি ব্যবহার করতে পারেন।
STATICFILES_DIRS = [
BASE_DIR / "static", # এখানে BASE_DIR হলো আপনার প্রোজেক্ট ডিরেক্টরি
]
৩. STATIC_ROOT কনফিগারেশন (প্রোডাকশনে)
প্রোডাকশন পরিবেশে, যখন আপনি আপনার স্ট্যাটিক ফাইলগুলো একত্রিত করবেন, তখন STATIC_ROOT সেটিংটি ব্যবহার করতে হবে। এটি নির্ধারণ করে যে, collectstatic কমান্ড চালানোর পর, স্ট্যাটিক ফাইলগুলো কোথায় সংরক্ষিত হবে।
STATIC_ROOT = BASE_DIR / 'staticfiles'
Static Files সরবরাহ করা
১. Django-তে Static File সংরক্ষণ
আপনার Django প্রজেক্টে স্ট্যাটিক ফাইল সংরক্ষণ করার জন্য static/ নামের একটি ডিরেক্টরি তৈরি করুন। এই ডিরেক্টরিতে আপনি আপনার CSS, JavaScript, এবং Image ফাইলগুলো রাখতে পারবেন।
উদাহরণস্বরূপ:
myproject/
static/
css/
style.css
js/
app.js
images/
logo.png
২. Static File ব্যবহার করা
Django টেমপ্লেটে স্ট্যাটিক ফাইল ব্যবহার করতে, প্রথমে {% load static %} ট্যাগটি ব্যবহার করে স্ট্যাটিক ফাইলগুলো লোড করতে হবে। এরপর আপনি ফাইলগুলোকে ডাইনামিকভাবে উল্লেখ করতে পারেন।
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Django App</title>
<link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">
</head>
<body>
<h1>Welcome to my Django app!</h1>
<img src="{% static 'images/logo.png' %}" alt="Logo">
<script src="{% static 'js/app.js' %}"></script>
</body>
</html>
এখানে, {% static 'css/style.css' %} ট্যাগটি স্ট্যাটিক ফাইলটির URL উৎপন্ন করে।
৩. Static File সরবরাহ করা (Development Mode)
ডেভেলপমেন্ট মোডে, Django স্বয়ংক্রিয়ভাবে static files সরবরাহ করে। runserver কমান্ড চালানোর সময় আপনাকে স্ট্যাটিক ফাইল আলাদাভাবে কনফিগার করতে হবে না।
৪. Static File সরবরাহ করা (Production Mode)
প্রোডাকশন পরিবেশে, Django collectstatic কমান্ড ব্যবহার করে স্ট্যাটিক ফাইলগুলো একত্রিত এবং পরিবেশন করতে সাহায্য করে। প্রথমে আপনি collectstatic কমান্ডটি চালাতে হবে:
python manage.py collectstatic
এটি সমস্ত স্ট্যাটিক ফাইল একত্রিত করে এবং STATIC_ROOT ডিরেক্টরিতে সংরক্ষণ করে, যা পরে ওয়েব সার্ভার দ্বারা পরিবেশন করা যাবে।
প্রোডাকশন পরিবেশে স্ট্যাটিক ফাইলগুলি nginx বা Apache এর মাধ্যমে সরবরাহ করা হয়।
Static Files এর নিরাপত্তা
- স্ট্যাটিক ফাইলের অ্যাক্সেস: Django-তে স্ট্যাটিক ফাইলের মাধ্যমে অ্যাপ্লিকেশনের নিরাপত্তা ঝুঁকি থাকে না, কারণ শুধুমাত্র পাবলিক রিসোর্স (যেমন CSS, JS, ইমেজ) সরবরাহ করা হয়। তবে, গুরুত্বপূর্ণ ফাইল বা ডাটা কখনোই স্ট্যাটিক ফোল্ডারে সংরক্ষণ করা উচিত নয়।
- স্ট্যাটিক ফাইলের কনটেন্ট কন্ট্রোল: প্রোডাকশন পরিবেশে, আপনি নিশ্চিত করতে পারেন যে স্ট্যাটিক ফাইলগুলোর কনটেন্ট সঠিকভাবে কন্ট্রোল করা হয়েছে, যাতে ইউজারদের কাছে সঠিক ডাটা প্রদর্শিত হয়।
সারাংশ
- Static files (CSS, JavaScript, Images) হলো এমন ফাইল যেগুলো ডেভেলপমেন্ট এবং প্রোডাকশন পরিবেশে ব্রাউজারে সরবরাহ করা হয়।
- Django-তে স্ট্যাটিক ফাইলের জন্য কিছু কনফিগারেশন যেমন
STATIC_URL,STATICFILES_DIRS, এবংSTATIC_ROOTব্যবহার করতে হয়। {% static %}ট্যাগ ব্যবহার করে টেমপ্লেটে স্ট্যাটিক ফাইল সংযুক্ত করা হয়।- প্রোডাকশন পরিবেশে
collectstaticকমান্ড ব্যবহার করে স্ট্যাটিক ফাইলগুলো একত্রিত করা হয় এবং ওয়েব সার্ভার দ্বারা সরবরাহ করা হয়।
Read more